package br.com.news.database.daos;

import java.util.ArrayList;
import java.util.List;

import javax.inject.Named;

import org.hibernate.Criteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;

import br.com.news.database.daos.interfaces.IUsuarioDao;
import br.com.news.database.entities.UsuarioEntity;
import br.com.news.database.utils.GenericDao;
import br.com.news.utils.database.beans.UsuarioBean;

@Named
public class UsuarioDao extends GenericDao<UsuarioEntity, String> implements IUsuarioDao{

	@Override
	public List<UsuarioBean> teste() {

		List<UsuarioBean> listUsuariosTeste = new ArrayList<UsuarioBean>();
		listUsuariosTeste.add(new UsuarioBean("alexandrec","Alexandre"));
		listUsuariosTeste.add(new UsuarioBean("paulox","Paulo"));
		listUsuariosTeste.add(new UsuarioBean("jeff","Jefferson"));

		return listUsuariosTeste;
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<UsuarioEntity> findByExample(UsuarioEntity usuario) {
		Criteria criteria = getSession()
		.createCriteria(UsuarioEntity.class);
		
		if (usuario.getNome() != null && !usuario.getNome().equals("")) {
			criteria.add(Restrictions.like("nome", usuario.getNome(),MatchMode.ANYWHERE));
		}
		if (usuario.getLogin() != null && !usuario.getLogin().equals("")) {
			criteria.add(Restrictions.like("login", usuario.getLogin(),MatchMode.ANYWHERE));
		}
		if (usuario.getSexo() != null && Character.isDigit(usuario.getSexo())) {
			criteria.add(Restrictions.eq("sexo", usuario.getSexo()));
		}
		criteria.add(Restrictions.eq("perfil", usuario.getPerfil()));
		criteria.add(Restrictions.eq("status", usuario.isStatus()));
		
		return criteria.list();
	}
	
	@Override
	public List<UsuarioEntity> buscaTodosOsUsuariosAtivos() {
		Criteria criteria = getSession().createCriteria(UsuarioEntity.class);
		
		return criteria.add(Restrictions.eq("status", true)).list();
	}

	@Override
	public UsuarioEntity autenticar(UsuarioEntity usuarioEntity) {
		Criteria criteria = getSession().createCriteria(UsuarioEntity.class);
		criteria.add(Restrictions.eq("login", usuarioEntity.getLogin()));
		criteria.add(Restrictions.eq("senha", usuarioEntity.getSenha()));
		return (UsuarioEntity) criteria.uniqueResult();
	}

}
